[% setvar title Perl 6 summary for week ending 2002-07-21 %]
<div id="archive-notice">
    <h3>This file is part of the Perl 6 Archive</h3>
    <p>To see what is currently happening visit <a href="http://www.perl6.org/">http://www.perl6.org/</a></p>
</div>
<div class='pod'>
<a name='TITLE'></a><h1>TITLE</h1>
<p>Perl 6 summary for week ending 2002-07-21</p>
<a name='AUTHOR'></a><h1>AUTHOR</h1>
<p>Leon Brocard &lt;<a href='mailto:acme@astray.com'>acme@astray.com</a>&gt;</p>
<a name='DETAILS'></a><h1>DETAILS</h1>
<p>Another week, another Perl 6 summary. Cunningly this week I have taken
over the summary from Piers in order to make it easier for me to
namecheck myself. It's been a good week too, with more happening in
perl6-internals than perl6-language. So that's where I'll start...</p>
<a name='Parrot 0.0.7'></a><h2>Parrot 0.0.7</h2>
<p>The big news for this week is that DrForr has released Parrot 0.0.7 to
the world (strange that lots of open source projects are releasing
code just before the O'Reilly Open Source conference...). This release
contains a Perl 6 grammar (with small, partial compiler!), functional
subroutine, coroutine and continuation PMCs, global variables, an
intermediate code compiler (imcc), a pure-Perl assembler and working
garbage collection. &quot;The name is Parrot. Percy Parrot.&quot;</p>
<p><a href='http://archive.develooper.com/perl6-internals@perl.org/msg11090.html' target='_blank'>archive.develooper.com</a>
<a href='http://www.cpan.org/modules/by-authors/id/J/JG/JGOFF/parrot_0.0.7.tgz' target='_blank'>www.cpan.org</a></p>
<p>Note that the really cool Perl 6 compiler needs at least Perl 5.6. Oh,
and check out imcc if you haven't looked at it yet.</p>
<a name='Retro Perl'></a><h2>Retro Perl</h2>
<p>Nicholas Clark stated that &quot;In October 2000 I believed that 5.005
maintenance *is* important for the acceptance of perl6, and I still do
now&quot;. A first patch to the preliminary Perl 6 compiler was sent by
Leopold Toetsch to make it work on 5.005_03 and seeing as Chip
Salzenberg has restarted work on a new maintenance release of Perl
5.005 it's probably good for various parts of Parrot to run on retro
perls. Shouldn't be a major problem.</p>
<a name='Parrot docs'></a><h2>Parrot docs</h2>
<p>One of the big pushes last week was for more documentation inside
Parrot. Writing documentation is always a problem for an open source
project and it hit the wall last week. The good news is that lots of
new documentation has been added to Parrot.</p>
<p>There was some discussion on the nature of documentation. The result
is that inline C documention should write up API details and that
longer discussions (say, the choice of algorithms, how to avoid
overflows in unsigned arithmetic, the pros and cons of differing
hash algorithms) would end up as .dev files inside the docs/dev/
directory, much as PDD07 &quot;Conventions and Guidelines for Perl Source
Code&quot; says. A few more documentation patches followed.</p>
<p>Recently the mailing list and IRC channel have been quite busy and it
seems like the new push for more documentation has attracted new
people. Bonus!</p>
<p><a href='http://archive.develooper.com/perl6-internals@perl.org/msg11080.html' target='_blank'>archive.develooper.com</a></p>
<a name='MANIFESTations'></a><h2>MANIFESTations</h2>
<p>The Parrot MANIFEST file tends not to be kept up-to-date with recent
additions. Andy Dougherty produced a patch to do this. Nicholas Clark
asked: &quot;Is CVS flexible enough to let us run a manifest check on each
commit and generate warnings that get sent somewhere useful if it
fails?&quot;. Robert Spier answered that it could and with any luck he'll
get it in soon...</p>
<a name='RECALL'></a><h2>RECALL</h2>
<p>Tanton Gibbs posted a patch to clean up a problem with our Copy on
Write strategy. He kindly explained it for me: &quot;The basic problem is
that in perlint.pmc we have something like:</p>
<pre>  void set_string( PMC* value ) {
    CHANGE_TYPE( SELF, PerlString );
    SELF-&gt;data = value-&gt;data
  }</pre>
<p>In other words implement a COW strategy after being changed into a
PerlString. However, in perlstring.pmc the following is performed:</p>
<pre>  void set_string( PMC* value ) {
    SELF-&gt;data = string_copy( INTERP, value-&gt;data );
  }</pre>
<p>The RECALL command automates that so that set_string now looks like:</p>
<pre>  void set_string( PMC* value ) {
    CHANGE_TYPE( pmc, PerlString );
    RECALL;
  }</pre>
<p>Thanks to Tanton for explaining.</p>
<a name='Internals misc'></a><h2>Internals misc</h2>
<p>There were also lots of other small patches and discussions. It looks
like the push for this week is to make it easier to add new PMCs to
Parrot.</p>
<a name='Meanwhile, in perl6-language'></a><h2>Meanwhile, in perl6-language</h2>
<p>It was a quiet week in the perl6-language list, which is probably a
good thing as thinking too much about hyper operators makes my head
hurt.</p>
<a name='Hyper operators'></a><h2>Hyper operators</h2>
<p>There was some discussion on hyper operators this week. It didn't go
anywhere in particular, but discussed lots of syntax. Objections such
as &quot;this code looks ugly!&quot; came up regularly when talking about code
such as:</p>
<pre>  @solution =  (^<a href='mailto:-@b'>-@b</a> + sqrt(@b^**2 ^+ 4^*@a^*@c) ) ^/ (2^*@a);</pre>
<p>Luke Palmer pointed out that it might be better expressed as:</p>
<pre>  for @a; @b; @c; @s is rw -&gt;
    $a; $b; $c; $s {
      $s = (-$b + sqrt($b**2 - 4*$a*$c)) / (2*$a)
  }</pre>
<p>Karl Glazebrook explained that PDL keeps everything as objects and
does hyper operator magic without additional syntax. So Perl 6 &quot;@y =
$a ^* @x ^+ @b&quot; happens in PDL with the clearer &quot;$y = $a * $x + $b&quot;.
Isn't PDL shiny?</p>
<a name='Whitespace?'></a><h1>Whitespace?</h1>
<p>Brent Dax noticed that there might be a problem with the regular
expression modifier &quot;:w&quot;. The words modifier, according to Apocalypse
5 , &quot;causes an implicit match of whitespace wherever there's literal
whitespace in a pattern&quot;. He asked what the following expand to:</p>
<pre>  m:w/foo [~|bar]/
  m:w/[~|bar] foo/
  m:w/[~|bar] [^|baz]/
  m:w/@foo @bar/</pre>
<p>Luke Palmer expanded that &quot;In other words, it replaces every sequence
of actual whitespace in the pattern with a \s+ (between two
identifiers) or a \s* (between anything else)&quot;. Thus, the first would
expand to:</p>
<pre>  m/ foo \s* [~ | bar] /</pre>
<p>However, it's not easy to represent, as the later cases point out. He
continues: &quot;Perhaps :w wouldn't transform the rexex, but keep
'markers' on where there was whitespace in the regex&quot;. Nevertheless,
it's a very useful feature.</p>
<a name='Acknowledgements'></a><h2>Acknowledgements</h2>
<p>This summary was brought to you from the O'Reilly Open Source
conference and with the music from the intro to Buffy the Vampire
Slayer.</p>
<p>As Piers says: Once again, if you liked this, then give money to YAS,
if you didn't like it, well, then you can still give them money; maybe
they'll use it to hire a better writer. Or maybe you could write a
competing summary.</p>
</div>
